AI Stack

Home

Services running on PCT 109 (ai, 192.168.2.83). Privileged LXC, NVIDIA GPU passthrough. Not a Docker Swarm node — all services are standalone Docker Compose.


Service URLs

Service URL Port
LiteLLM litellm.carr-family.org 4000 (lan-only)
n8n n8n.carr-family.org 5678 (lan-only)
OpenClaw openclaw.carr-family.org 18789 (lan-only)
Odysseus odysseus.carr-family.org 7000 (lan-only)
Firecrawl API 192.168.2.83:3002
Whisper 192.168.2.83:8001
Proton Bridge SMTP 192.168.2.83:1025
Proton Bridge IMAP 192.168.2.83:1143

Key Paths

Path Contents
/usr/local/bin/hermes Hermes agent binary
/root/.hermes/config.yaml Hermes config (model, MCP servers)
/opt/litellm/config.yaml LiteLLM model list + master key
/opt/litellm/docker-compose.yml LiteLLM + Postgres compose
/opt/ai-tools/docker-compose.yml n8n + Qdrant compose
/opt/n8n/data n8n workflows, credentials
/opt/qdrant/data Qdrant vector store
/opt/firecrawl/ Firecrawl compose project
/root/.openclaw/openclaw.json OpenClaw config
/opt/odysseus/ Odysseus compose project
/opt/whisper/ Whisper compose project
/opt/proton-bridge/ Proton Bridge compose project
/mnt/obsidian/ Obsidian vault (read-write bind mount)

LiteLLM

OpenAI-compatible proxy at litellm.carr-family.org/ui. Compose: /opt/litellm/.

  • Master key: sk-homelab-litellm-admin
  • UI login: admin / sk-homelab-litellm-admin
  • DB: postgres:16-alpine (host port 5433)
  • Restart: pct exec 109 -- bash -c "cd /opt/litellm && docker compose up -d"

Models:

Model Backend
gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini OpenAI (direct)
llama3.1:8b, llama3.2:3b Ollama @ 192.168.2.40:11434 (CPU)
qwen3.6:27b, qwen3.5, ministral-3, llama3.2, llama3.1:8b-gpu Ollama @ 192.168.2.11:11434 (RTX 3060)
llava Ollama @ 192.168.2.11 — vision/OCR (paperless-gpt uses llava:7b)
nomic-embed-text Ollama @ 192.168.2.11 — embeddings for Qdrant

n8n

Workflow automation at n8n.carr-family.org. Compose: /opt/ai-tools/ (n8n + Qdrant).

  • Data: /opt/n8n/data
  • Restart: pct exec 109 -- bash -c "cd /opt/ai-tools && docker compose up -d"
  • Vault mount: /mnt/obsidian:/mnt/obsidian:ro inside container
  • Code node: NODE_FUNCTION_ALLOW_BUILTIN=fs,path — required to read vault files

Credentials in n8n:

Name Type Value
Qdrant Local Qdrant API http://qdrant:6333 (no API key)
Ollama .11 Ollama http://192.168.2.11:11434
LiteLLM OpenAI OpenAI Key: sk-homelab-litellm-admin, Base: http://192.168.2.83:4000

Claude Code MCP: n8n-mcp server in ~/.claude/mcp.json on Proxmox host. URL: https://n8n.carr-family.org/mcp-server/http. Reload by restarting Claude Code.

Key Workflows:

  • Obsidian Vault — Ingest to Qdrant — reads all .md from vault, chunks + embeds into Qdrant. Run manually to re-index.
  • Obsidian Vault — Chat — chat UI backed by Qdrant RAG + gpt-4o via LiteLLM.

Qdrant

Vector store. Part of /opt/ai-tools/docker-compose.yml.

  • Ports: 6333 (HTTP/REST), 6334 (gRPC)
  • Data: /opt/qdrant/data
  • Collection: obsidian_vault (vector size: 192, distance: Cosine, model: nomic-embed-text)
  • Check: curl http://192.168.2.83:6333/collections/obsidian_vault

Hermes Agent

AI agent with MCP access to the Obsidian vault.

  • Binary: /usr/local/bin/hermes
  • Default model: gpt-4o via LiteLLM
  • MCP server: obsidian-vaultmcp-server-filesystem /mnt/obsidian (read/write/search)
  • Manage MCP: hermes mcp ls/add/remove
  • Config: /root/.hermes/config.yaml, /root/.hermes/.env

OpenClaw

Claude AI desktop client. Version 2026.5.27.

  • UI: openclaw.carr-family.org (lan-only)
  • Gateway port: 18789, systemd service: openclaw-gateway.service
  • Restart: openclaw daemon restart
  • Config: /root/.openclaw/openclaw.json

Model Providers:

Provider Backend Models
openai OpenAI API (direct) gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini
ollama-11 Ollama @ 192.168.2.11 (RTX 3060) qwen3.6:27b, qwen3.5, ministral-3, llama3.2, llama3.1:8b, llava:7b
ollama-40 Ollama @ 192.168.2.40 (CPU) llama3.1:8b, llama3.2:3b

Cron Jobs:

Job Schedule Model Discord Channel
homelab-self-heal every 15 min openai/gpt-4o-mini 1509897448645201981
archibus-daily-digest 08:00 Mon–Fri ollama-11/qwen3.6:27b 1491754165335101460

Odysseus

Self-hosted AI workspace at odysseus.carr-family.org. Port 7000.

  • Compose: /opt/odysseus/docker-compose.yml
  • Data: /opt/odysseus/data/ (SQLite, uploads, ChromaDB)
  • Bundled: ChromaDB (127.0.0.1:8100), SearXNG (127.0.0.1:8080), ntfy (127.0.0.1:8091)
  • LLM: via LiteLLM proxy (http://host.docker.internal:4000/v1)
  • Restart: pct exec 109 -- bash -c "cd /opt/odysseus && docker compose restart"
  • Update: pct exec 109 -- bash -c "cd /opt/odysseus && git pull && docker compose up -d --build"

Firecrawl

Web scraping / crawling API.

  • API: http://192.168.2.83:3002
  • API key: fc-1d4542a7babd39e33b04ce858af45295
  • Compose: /opt/firecrawl/
  • Restart: pct exec 109 -- bash -c "cd /opt/firecrawl && docker compose up -d"

Whisper Transcription

faster-whisper-server — OpenAI-compatible /v1/audio/transcriptions. Used by the Audio Recorder.

  • Port: 8001 (host-mode)
  • Model: base (cached at /tank/appdata/whisper/models/)
  • Compose: /opt/whisper/docker-compose.yml
  • Restart: pct exec 109 -- bash -c "cd /opt/whisper && docker compose restart"

Proton Bridge (SMTP/IMAP Relay)

Headless Proton Bridge for outbound email from gcjobs-filler, Calibre-Web, etc.

  • SMTP: 192.168.2.83:1025 (STARTTLS)
  • IMAP: 192.168.2.83:1143 (STARTTLS)
  • Credentials: [email protected] / 8A2SC9qao04GsSqBrfjtFg
  • Compose: /opt/proton-bridge/docker-compose.yml
  • Restart: pct exec 109 -- bash -c "rm -f /opt/proton-bridge/data/.cache/protonmail/bridge-v3/bridge-v3.lock && cd /opt/proton-bridge && docker compose restart"
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9